﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DAO
{
    public class AtividadePessoaDAO
    {
        #region Leitores
        public static AtividadePessoa Selecionar(int eventoID, int id)
        {
            try
            {
                var bco = new PersistenciaContainer();
                var obj = bco.AtividadePessoas.FirstOrDefault(e => e.eventoID == eventoID && e.ID == id);
                if (obj == null) { throw new Exception("AtividadePessoa não encontrada!"); }
                return obj;
            }
            catch (Exception ex)
            {
                throw new Exception("Selecionar() - " + ex.Message.ToString());
            }
        }
        public static List<AtividadePessoa> Listar(int eventoID, int pessoaID, int atividadeID)
        {
            PersistenciaContainer bco = new PersistenciaContainer();
            List<AtividadePessoa> listagem = (from a in bco.AtividadePessoas where a.eventoID == eventoID select a).ToList();

            if (pessoaID != 0)
            {
                listagem = (from a in bco.AtividadePessoas where a.pessoaID == pessoaID select a).ToList();
            }

            if (atividadeID != 0)
            {
                listagem = (from a in bco.AtividadePessoas where a.atividadeID == atividadeID select a).ToList();
            }

            return listagem;
        }

        #endregion

        #region Modificadores
        public static void Salvar(AtividadePessoa objNovo)
        {
            try
            {
                PersistenciaContainer bco = new PersistenciaContainer();

                // Validação
                verificaSeJaPossuiInscricao(objNovo.eventoID, objNovo.atividadeID, objNovo.pessoaID);

                if (objNovo.ID == 0)
                {
                    bco.AtividadePessoas.AddObject(objNovo);

                    //// Atualiza o saldo de vagas.
                    //Atividade atividade = bco.Atividades.FirstOrDefault(a => a.eventoID == objNovo.eventoID && a.ID == objNovo.atividadeID);
                    //if (atividade != null)
                    //    atividade.totalVagas -= 1;

                    bco.SaveChanges();
                }

                else
                {
                    AtividadePessoa objOLD = bco.AtividadePessoas.FirstOrDefault(e => e.eventoID == objNovo.eventoID && e.ID == objNovo.ID);

                    if (objOLD != null)
                    {
                        objOLD.pessoaID = objNovo.pessoaID;
                        objOLD.papelID = objNovo.papelID;
                        objOLD.atividadeID = objNovo.atividadeID;

                        bco.SaveChanges();
                    }
                    else
                        throw new Exception("AtividadePessoa não localizado!");
                }

            }
            catch (Exception)
            {
                throw;
            }
        }
        #endregion

        #region Validadores

        public static bool verificaSeJaPossuiInscricao(int? eventoID, int? atividadeID, int? pessoaID)
        {
            try
            {
                PersistenciaContainer bco = new PersistenciaContainer();
                if (bco.AtividadePessoas.FirstOrDefault(g => g.eventoID == eventoID && g.atividadeID == atividadeID && g.pessoaID == pessoaID) == null)
                    return true;
                else
                    throw new Exception("Não é possivel realizar inscrição! Pois já existe uma inscrição para esta atividade com este e-mail!");
            }
            catch (Exception)
            {
                throw;
            }



        }
        #endregion
    }
}
